#include <iostream>
#include <typeinfo>
#include <cxxabi.h>

using namespace std;

char *GetRealTypeName(const char *name)
{
    int status = 0;
    return abi::__cxa_demangle(name, 0, 0, &status);
}

int main()
{
    long double ldNum = 100;
    float fltNum = 1.99;
    auto ldPlusfloat = ldNum + fltNum;
    cout << GetRealTypeName(typeid(ldPlusfloat).name()) << endl;
    int numInt = 10;
    unsigned int unSignInt = 10;
    auto intPlusUInt = numInt + unSignInt;
    cout << GetRealTypeName(typeid(intPlusUInt).name()) << endl;

    // int &numRef = numVal;

    // cout << GetRealTypeName(typeid(numRef).name()) << endl;
    // cout << GetRealTypeName(typeid(numVal).name()) << endl;

    // uint32_t u32Val = 32;
    // cout << GetRealTypeName(typeid(u32Val).name()) << endl;
}